package course.p3_arraysSort.exa01_maopao;

import course.p3_arraysSort.SortUtil;

import java.util.Arrays;

import static course.p3_arraysSort.SortUtil.MAOPAO;

public class MaoPaoSort {

    /**
     * 冒泡排序
     * 此排序方法会影响传入数组，用前请知晓,时间复杂度O(n^2)
     * @param array 需要排序的数组
     * @param <T> 泛型类型
     * @return 返回处理后的结果
     */
    public static <T extends Comparable<T>> T[] sort(T[] array) {
        if (array == null || array.length == 0) {
            return null;
        }
        // 每次大循环确定一个最小值
        for (int i = 0; i < array.length; i++) {
            for(int j = i+1; j < array.length; j++) {
                if(array[i].compareTo(array[j]) > 0) {
                    T temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
        return array;
    }

    /**
     * 冒泡排序整数数组实现
     * @param array
     */
    public static void sort(int[] array) {
        // 特殊情况处理
        if(array==null||array.length==0) {
            return;
        }
        // 每次大循环确定一个最小值
        for(int i=0;i < array.length;i++) {
            for(int j=i+1;j<array.length;j++) {
                if(array[i] > array[j]) {
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
    }


    public static void main(String[] args) {
        Integer[] numbs = {9,2,5,7,3};
        sort(numbs);
        System.out.println(Arrays.toString(numbs));
        for(;;){
            boolean isRight = SortUtil.sortTest(1,MAOPAO,1000,"timeTest");
            if(isRight) {
                System.out.println("正确的算法！！");
            }else{
                System.out.println("错误的算法");
                break;
            }
        }
    }


}
